home *** CD-ROM | disk | FTP | other *** search
- ' This program contains 3 new subroutines which
- ' may be used with the ZBasic Program Generator.
- ' ©1989 MacTutor
- ' Subroutines by Charles Stricklin, modified by Dave Kelly
- '************************************************************
- ' • CONFIGURATION •
- '************************************************************
- '
- ' Default Variable Type:Integer
- ' Convert to Upper Case:Yes
- ' Space Req.After Key Words:Yes
- ' Array Base 1:No
- ' Bundle Bit:Yes
- '
- '************************************************************
- ' • SET UP VARIABLES •
- '************************************************************
- WINDOW OFF:COORDINATE WINDOW:DEF MOUSE=-1:WIDTH -2
- DIM T,L,B,R,MY,MX' REQUIRED FOR TOOL BOX CALLS
- '------------------------------------------------------------
- WND=1:GOSUB"BUILD WINDOW"
- GOSUB "BUILD MENU"
- GOTO"EVENT QUEUE"
- '************************************************************
- ' • THE QUEUE •
- '************************************************************
- "EVENT QUEUE"
- ON DIALOG GOSUB "HANDLE DIALOG":DIALOG ON
- ON BREAK GOSUB "HANDLE BREAK" :BREAK ON
- ON MOUSE GOSUB "HANDLE MOUSE" :MOUSE ON
- ON MENU GOSUB "Handle Menu" :MENU ON
- :
- "LOOP"
- GOTO"LOOP"
- :
- DIALOG OFF:BREAK OFF:MOUSE OFF
- '************************************************************
- ' • DIALOG ROUTINES •
- '************************************************************
- "HANDLE DIALOG"
- :
- ACT=DIALOG(0):REF=DIALOG(ACT)
- :
- IF ACT=3 THEN WINDOW REF:RETURN
- IF ACT=4 THEN GOSUB"CAPTURE":WINDOW CLOSE REF:END
- IF ACT=5 THEN "FORMAT WINDOW"
- IF ACT=11 THEN EDIT FIELD REF,""
- :
- LONG IF WINDOW(0)=1
- END IF
- :
- RETURN
- '************************************************************
- ' • BREAK ROUTINE •
- '************************************************************
- "HANDLE BREAK"
- END
- '************************************************************
- ' • MOUSE ROUTINES •
- '************************************************************
- "HANDLE MOUSE"
- :
- MACT=MOUSE(0):MX=MOUSE(1):MY=MOUSE(2)
- :
- RETURN
- "Handle Menu"
- MenuNumber=MENU(0)
- Menuitem=MENU(1)
- MENU
- IF MenuNumber=1 AND Menuitem=12 THEN END
- RETURN
-
- 'GETINDSTRING$ function By Charles Stricklin
- 'Modified by Dave Kelly for MacTutor, May, 1989
-
- 'This function is identical to the procedure GetIndString
- 'which is not in ROM and not supported by ZBasic. It reads
- 'a string from a string list and returns a copy of it in the
- 'variable the String$. If the string list doesn't exist of the
- 'index is out of range an empty string is returned.
-
- ' stringListID is the resource ID of the string list; it's resource type is 'STR#'.
- ' stringIndex is the index of the desired string within the list.
-
- LONG FN GETINDSTRING$(StringListID, StringIndex)
- TheString$=""
- Offset=0
- FALSE=0
- MyHandle&=FN GETRESOURCE(CVI("STR#"),StringListID)
- LONG IF FN RESERROR=FALSE
- MyPointer&=USR 3(MyHandle&)
- NumberOfStrings=PEEK WORD(MyPointer&)
- LONG IF (StringIndex>0) AND (StringIndex <= NumberOfStrings)
- LONG IF StringIndex>1
- FOR ThisString=1 TO StringIndex-1
- LengthOfThisString=PEEK(MyPointer&+2+Offset)
- Offset=Offset+LengthOfThisString+1
- NEXT
- END IF
- LengthOfDesiredString=PEEK(MyPointer&+2+Offset)
- FOR Character=1 TO LengthOfDesiredString
- TheString$=TheString$+CHR$(PEEK(MyPointer&+2+Offset+Character))
- NEXT
- END IF
- MyHandle&=USR 7(MyPointer&)
- CALL DETACHRESOURCE(MyHandle&)
- END IF
- END FN= TheString$
-
- 'GETRESMENU function By Charles Stricklin
- 'Modified by Dave Kelly for MacTutor, May, 1989
-
- 'This function creates a ZBasic menu from a MENU resource.
- 'The result given is boolean; true if the task is accomplished,
- 'false if there's a problem (i.e. the resource doesn't exist, etc.)
-
- ' resourceID is the resource ID of the menu resource to be used.
- ' menuNumber is the ZBasic number of the menu to be created.
-
- LONG FN GETRESMENU(ResourceID, MenuNumber)
- DEFSTR LONG
- Done=0
- FALSE=0
- MenuBlkSize=14
- Title$=""
- MyHandle&=FN GETRESOURCE(CVI("MENU"),ResourceID)
- LONG IF FN RESERROR=FALSE
- MyPointer&=USR 3(MyHandle&)
- EnableFlags&=PEEK LONG(MyPointer&+10)
- State=VAL(MID$(BIN$(EnableFlags&),32,1))
- LengthTitle=PEEK(MyPointer&+MenuBlkSize)
- FOR Character=1 TO LengthTitle
- Title$=Title$+CHR$(PEEK(MyPointer&+MenuBlkSize+Character))
- NEXT
- MENU MenuNumber,0,State,Title$
- Offset&=MenuBlkSize+LengthTitle+1
- DO
- MenuItem=MenuItem+1:Title$=""
- LengthTitle=PEEK(MyPointer&+Offset&)
- FOR Character=1 TO LengthTitle
- Title$=Title$+CHR$(PEEK(MyPointer&+Offset&+Character))
- NEXT
- Offset&=Offset&+LengthTitle+1
- IconNumber&=PEEK(MyPointer&+Offset&)
- IF IconNumber& THEN Title$=Title$+"^"+RIGHT$(STR$(IconNumber&),1)
- CommandKey=PEEK(MyPointer&+Offset&+1)
- IF CommandKey THEN Title$=Title$+"/"+CHR$(CommandKey)
- MarkChar = PEEK(MyPointer&+Offset&+2)
- IF MarkChar THEN Title$=Title$+"!"+CHR$(MarkChar)
- CharacterStyle=PEEK(MyPointer&+Offset&+3)
- IF FN BITTST(CharacterStyle,0) THEN Title$=Title$+"<B"
- IF FN BITTST(CharacterStyle,1) THEN Title$=Title$+"<I"
- IF FN BITTST(CharacterStyle,2) THEN Title$=Title$+"<U"
- IF FN BITTST(CharacterStyle,3) THEN Title$=Title$+"<O"
- IF FN BITTST(CharacterStyle,4) THEN Title$=Title$+"<S"
- State=VAL(MID$(BIN$(EnableFlags&),32-MenuItem,1))
- Offset&=Offset&+4
- MENU MenuNumber, MenuItem, State, Title$
- UNTIL PEEK(MyPointer&+Offset&)=FALSE
- Done=-1
- END IF
- MyHandle&=USR 7(MyPointer&)
- CALL DETACHRESOURCE(MyHandle&)
- END FN=Done
-
- 'GETRESWINDOW function By Charles Stricklin
- 'Modified by Dave Kelly for MacTutor, May, 1989
-
- 'This function creates a ZBasic window from a window template
- 'resource. The result given is boolean;true if task is accomplished,
- 'false if there's a problem (i.e. resource doesn't exist, etc.)
-
- ' resourceID is the resource ID of the window template to be used.
- ' windowNumber is the ZBasic number of the window to be created.
- ' modal is boolean.
-
- LONG FN GETRESWINDOW(ResourceID, WindowNumber, Modal)
- Done=0
- Title$=""
- FALSE=0
- MyHandle&=FN GETRESOURCE(CVI("WIND"),ResourceID)
- LONG IF FN RESERROR=FALSE
- MyPointer&=USR 3(MyHandle&)
- Y1=PEEK WORD(MyPointer&)
- X1=PEEK WORD(MyPointer&+2)
- Y2=PEEK WORD(MyPointer&+4)
- X2=PEEK WORD(MyPointer&+6)
- Type=PEEK WORD(MyPointer&+8)+1
- HasClose=PEEK WORD(MyPointer&+12)
- LengthOfTitle=PEEK(MyPointer&+18)
- FOR Character=1 TO LengthOfTitle
- Title$=Title$+CHR$(PEEK(MyPointer&+18+Character))
- NEXT
- IF Type=13 THEN Type=9: 'ZBasic doesn't support ZoomNoGrow
- IF HasClose=FALSE THEN Type=Type+256
- IF Modal THEN Type=-Type
- WINDOW WindowNumber,Title$,(X1,Y1)-(X2,Y2),Type
- Done=-1
- END IF
- MyHandle&=USR 7(MyPointer&)
- CALL DETACHRESOURCE(MyHandle&)
- END FN=Done
-
- '************************************************************
- ' • WINDOW ROUTINES •
- '************************************************************
- "BUILD WINDOW"
- IF WND=1 THEN Result=FN GETRESWINDOW(1,1,0)
- GOSUB"BUILD EDITS":GOSUB"FILL EDITS":GOSUB "FORMAT WINDOW"
- RETURN
- '************************************************************
- ' • MENU ROUTINES •
- '************************************************************
- "BUILD MENU"
- Result=FN GETRESMENU(1002,1)
- RETURN
- '************************************************************
- ' • PUT GRAPHICS & TEXT IN WINDOW •
- '************************************************************
- "FORMAT WINDOW"
- CALL PENNORMAL
- :
- LONG IF WINDOW(0)=1
- PrintString$=FN GETINDSTRING$(31618, 1)
- LOCATE 1,1:PRINT PrintString$
- PrintString$=FN GETINDSTRING$(31618, 2)
- LOCATE 4,2:PRINT PrintString$
- END IF
- :
- CALL PENNORMAL:RETURN
- '************************************************************
- ' • CREATE EDIT FIELDS AND BUTTONS •
- '************************************************************
- "BUILD EDITS"
- TEXT ,,0,0
- :
- LONG IF WINDOW(0)=1
- END IF
- :
- RETURN
- '************************************************************
- ' • FILL EDIT FIELDS AND SET BUTTONS •
- '************************************************************
- "FILL EDITS"
- :
- LONG IF WINDOW(0)=1
- END IF
- :
- RETURN
- '************************************************************
- ' • CAPTURE EDIT FIELD STRINGS & READ BUTTONS •
- '************************************************************
- "CAPTURE"
- :
- LONG IF WINDOW(0)=1
- END IF
- :
- RETURN
-